package ani.trainning.cacobatph.das;

import java.io.IOException;

import org.ksoap2.SoapEnvelope;
import org.ksoap2.serialization.PropertyInfo;
import org.ksoap2.serialization.SoapObject;
import org.ksoap2.serialization.SoapSerializationEnvelope;
import org.ksoap2.transport.HttpTransportSE;
import org.ksoap2.transport.ServiceConnectionSE;
import org.kxml2.kdom.Element;

import android.content.Context;
import android.os.Handler;
import android.os.Message;
import android.util.Log;
import ani.trainning.cacobatph.ConstantUtil;
import ani.trainning.cacobatph.R;
import ani.trainning.cacobatph.utilities;

public class Thr8_SendDas {

	private final Handler mHandler;
	private final Context context;
	public final static int SEND_DAS_OK=200;
	public final static int SEND_DAS_FAILURE=-200;

	String user;
	String pass;
	String modePaie;
	String fichier;
	String nomFichier;

	// constructor
	public Thr8_SendDas(Handler handler, Context context,String _user, String _pass ,String _modePaie,String fichier,String nomFichier) {
		mHandler = handler;
		this.context = context;
		this.user=_user;
		this.pass=_pass;
		this.modePaie=_modePaie;
		this.fichier=fichier;
		this.nomFichier=nomFichier;
	}

	public Thread createThread() {
		return new Thread() {
			@Override
			public void run() {
				// creation du message.
				try {

					String response=sendDas(context, user,pass);

					// Recuperation de la reponse et l'envoi au handler.
					Message msg=new Message();
					msg.what =SEND_DAS_OK ;
					msg.obj = response;
					mHandler.sendMessage(msg);

				} catch (Exception e) {
					Message msg=new Message();
					msg.obj = e;

					if (e instanceof IOException)
						msg.what = ConstantUtil.EXCEPTION_IO2;
					else
						msg.what =ConstantUtil.EXCEPTIONS;

					Log.e("thread exeption : ", ""+e.getMessage());
					mHandler.sendMessage(msg);

				}

			}
		};
	}

	private String sendDas(final Context context, String userName, String passWord)throws Exception {

		SoapObject request = new SoapObject(
				context.getResources().getString(R.string.NAMESPACE),
				context.getResources().getString(R.string.SEND_DAS_METHOD));
		//parametre mode paie
		PropertyInfo paramModePaie = new PropertyInfo();
		paramModePaie.setName(context.getResources().getString(R.string.MODE_PAIE_PARAM));
		paramModePaie.setValue(modePaie);
		paramModePaie.setType(String.class);
		request.addProperty(paramModePaie);

		//parametre fichier
		PropertyInfo paramFichier = new PropertyInfo();
		paramFichier.setName(context.getResources().getString(R.string.FICHIER_PARAM));
		paramFichier.setValue(fichier);
		paramFichier.setType(String.class);
		request.addProperty(paramFichier);

		//parametre nom fichier
		PropertyInfo paramNomFichier = new PropertyInfo();
		paramNomFichier.setName(context.getResources().getString(R.string.NOM_FICHIER_PARAM));
		paramNomFichier.setValue(nomFichier);
		paramNomFichier.setType(String.class);
		request.addProperty(paramNomFichier);

		SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11);
		envelope.dotNet = true;
		envelope.setOutputSoapObject(request);

		envelope.headerOut = new Element[1];
		envelope.headerOut[0] = utilities.buildAuthHeader(context, userName, passWord);

		HttpTransportSE androidHttpTransport = new HttpTransportSE(context.getResources().getString(R.string.URL))
		{
			@Override
			protected org.ksoap2.transport.ServiceConnection getServiceConnection()
			throws IOException {
				return new ServiceConnectionSE(context.getResources().getString(R.string.URL),ConstantUtil.TIMEOUT);
			}
		};
		androidHttpTransport.call(context.getResources().getString(R.string.NAMESPACE)
				+ context.getResources().getString(R.string.SEND_DAS_METHOD), envelope, null);

		String result = String.valueOf(envelope.getResponse());
		Log.i("chargement", "result : " + result);
		return result;


	}

}
